home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- import java.util.Vector;
-
- final class MergeCollation {
- Vector patterns = new Vector();
- PatternEntry lastEntry;
- private byte[] statusArray = new byte[8192];
- private int lastIndex = -1;
- private final byte BITARRAYMASK = 1;
-
- public MergeCollation(String var1) throws ParseException {
- for(int var2 = 0; var2 < this.statusArray.length; ++var2) {
- this.statusArray[var2] = 0;
- }
-
- this.setPattern(var1);
- }
-
- public String getPattern() {
- return this.getPattern(true);
- }
-
- public String getPattern(boolean var1) {
- StringBuffer var2 = new StringBuffer();
-
- for(int var3 = 0; var3 < this.patterns.size(); ++var3) {
- PatternEntry var4 = (PatternEntry)this.patterns.elementAt(var3);
- if (var4.extension.length() != 0) {
- var4.addToBuffer(var2, false, var1, this.findLastWithNoExtension(var3));
- } else {
- var4.addToBuffer(var2, false, var1, (PatternEntry)null);
- }
- }
-
- return var2.toString();
- }
-
- public String emitPattern() {
- StringBuffer var1 = new StringBuffer();
-
- for(int var2 = 0; var2 < this.patterns.size(); ++var2) {
- PatternEntry var3 = (PatternEntry)this.patterns.elementAt(var2);
- var3.chars.charAt(0);
- var1.append(var3.toString());
- }
-
- return var1.toString();
- }
-
- public void setPattern(String var1) throws ParseException {
- this.patterns.removeAllElements();
- this.addPattern(var1);
- }
-
- public void addPattern(String var1) throws ParseException {
- if (var1 != null) {
- int var2 = 0;
-
- while(true) {
- PatternEntry var3 = new PatternEntry();
- var2 = var3.getNextEntry(var1, var2);
- if (var2 < 0) {
- return;
- }
-
- this.fixEntry(var3);
- }
- }
- }
-
- public int getCount() {
- return this.patterns.size();
- }
-
- public PatternEntry getItemAt(int var1) {
- return (PatternEntry)this.patterns.elementAt(var1);
- }
-
- private final PatternEntry findLastWithNoExtension(int var1) {
- --var1;
-
- while(var1 >= 0) {
- PatternEntry var2 = (PatternEntry)this.patterns.elementAt(var1);
- if (var2.extension.length() == 0) {
- return var2;
- }
-
- --var1;
- }
-
- return null;
- }
-
- private final void fixEntry(PatternEntry var1) throws ParseException {
- if (var1.strength != -2) {
- int var2 = -1;
- boolean var3 = false;
- if (var1.chars.length() == 1) {
- var3 = true;
- var2 = var1.chars.charAt(0) / 8;
- if ((this.statusArray[var2] & (byte)(1 << var1.chars.charAt(0) % 8)) != 0) {
- var3 = false;
- this.patterns.removeElement(var1);
- this.lastIndex = this.patterns.indexOf(this.lastEntry);
- }
- } else {
- var2 = this.patterns.indexOf(var1);
- if (var2 != -1) {
- this.patterns.removeElementAt(var2);
- }
- }
-
- StringBuffer var4 = new StringBuffer();
- this.lastIndex = this.findLastEntry(this.lastEntry, var4);
- if (var4.length() != 0) {
- var1.extension = var4 + var1.extension;
- }
-
- this.patterns.insertElementAt(var1, this.lastIndex);
- if (var3) {
- byte[] var10000 = this.statusArray;
- var10000[var2] |= (byte)(1 << var1.chars.charAt(0) % 8);
- }
- } else {
- this.lastIndex = this.patterns.indexOf(var1);
- }
-
- this.lastEntry = var1;
- }
-
- private final int findLastEntry(PatternEntry var1, StringBuffer var2) throws ParseException {
- if (var1 == null) {
- return 0;
- } else if (var1.strength != -2) {
- int var5 = -1;
- if (var1.chars.length() == 1) {
- int var6 = var1.chars.charAt(0) / 8;
- if ((this.statusArray[var6] & (byte)(1 << var1.chars.charAt(0) % 8)) != 0) {
- var5 = this.lastIndex + 1;
- }
- } else {
- var5 = this.patterns.indexOf(var1) + 1;
- }
-
- if (var5 == -1) {
- throw new ParseException("couldn't find last entry: " + var1, var5);
- } else {
- return var5;
- }
- } else {
- int var3;
- for(var3 = this.patterns.size() - 1; var3 >= 0; --var3) {
- PatternEntry var4 = (PatternEntry)this.patterns.elementAt(var3);
- if (var4.chars.regionMatches(0, var1.chars, 0, var4.chars.length())) {
- var2.append(var1.chars.substring(var4.chars.length(), var1.chars.length()));
- break;
- }
- }
-
- if (var3 == -1) {
- throw new ParseException("couldn't find: " + var1, var3);
- } else {
- return var3 + 1;
- }
- }
- }
- }
-